Искусство схемотехники. Том 3 [Изд.4-е] - Пауль Хоровиц
Шрифт:
Интервал:
Закладка:
Таблица 11.6. Регистры микросхем Zilog 8530
Регистр · Функция
_____________________
Регистры чтения
RR0 · Состояние буферов приема-передачи и внешнее состояние
RR1 · Состояние условия специального приема
RR2 · Немодифицированный вектор прерывания (канал А); модифицированный вектор (канал В)
RR3 · Биты незавершенных прерываний
RR8 · Буфер приема
RR10 · Общее состояние
RR12 · Счетчик скорости пересылки (младший байт)
RR13 · Счетчик скорости пересылки (старший байт)
RR15 · Информация о прерывании, внешнее/состояние
Регистры записи
WR0 · Инициализация, указатели
WR1 · Прерывания и пересылка, определение режима
WR2 · Вектор прерывания
WR3 · Прием, параметры и управление
WR4 · Общие параметры и режимы
WR5 · Передача, параметры и управление
WR6 · Символы синхронизации или адресное поле SDLC
WR7 · Символ синхронизации или флаг SDLC
WR8 · Буфер передачи
WR9 · Управление и сброс прерывания ведущего
WR10 · Биты общего управления передачи/приема
WR11 · Управление режимом генератора
WR12 · Счетчик скорости пересылки (младший байт)
WR13 · Счетчик скорости пересылки (старший байт)
WR14 · Биты общего управления
WR15 · Управление прерыванием, внешнее/состояние
Для буферов передачи и приема (WR8 и RR8) двухэтапная процедура не приемлема, так как эти регистры используются при пересылке каждого байта; для них достаточно простых операций чтения или записи при D/C' в высоком состоянии. Точно так же, байт состояния буфера требует непосредственного доступа, поскольку чтение его флага обычно осуществляется при каждой пересылке байта данных; в микросхеме 8530 предусмотрено чтение RR0 с помощью простой операции чтения команды/состояния (D/C' в низком состоянии). Ниже мы рассмотрим все это подробнее на основе простых программ на языке ассемблера.
Каждый бит каждого регистра что-то означает. Например, на рис. 11.26 можно найти регистры WR3 и WR4, с помощью которых устанавливаются различные коммуникационные характеристики.
Рис. 11.26. Два регистра, используемые для инициализации микросхемы Zilog 8530.
В регистре WR3 к асинхронным операциям относятся только биты D0 разрешения приемника, D5 разрешения аппаратного квитирования (см. след. раздел) с помощью сигналов управления модемом CTS и DCD, а также два старших бита, определяющие число бит на символ. Остальные биты связаны с синхронными режимами, которые мы собираемся выключить соответствующим выбором D2-D3 в WR4. Таким образом, мы устанавливаем (D7, D6) = (1,1), D5 = 0 и D0 = 1, т. е. в WD3 мы посылаем шестнадцатеричный байт С1. С помощью WR4 мы задаем режим генератора x16 (минимальный делитель для асинхронных операций — УСАПП должен выполнять опрос сигнала каждого бита в его середине, поэтому частота входного генератора делается кратной частоте передачи), 1 стоп-бит на символ (используется всегда, за исключением устаревшего стандарта на телетайпную передачу со скоростью 110 бод), отсутствие контроля четности; получается шестнадцатеричный байт 44. Заметьте, что состояние битов D5-D4 не имеет значения, так как они управляют синхронной передачей; произвольно также состояние D1 (контроль четности или нечетности), если D0 (включение контроля) равен 0. Заметьте также, что установка 1 стоп-бита на символ (что имеет смысл только для асинхронного режима) автоматически выключает синхронный режим, а вместе с ним и все биты регистра управления, определяющие синхронные операции (например, D4-D1 в регистре WR3). Таким же образом можно управиться и с остальными управляющими регистрами. Это довольно скучная работа, в процессе которой легко допустить ошибки.
В табл. 11.7 приведены правильные, как мы надеемся, значения байтов (мы их тщательно проверили!).
Таблица 11.7. Инициализация последовательного порта 85301)
Регистр · Байт2) · Результат
________________________________
WR0 · (Указатель регистра) · Используется для доступа к WR1-WR15
WR1 · 00 · Запрет прерываний
WR2 · XX · Вектор прерываний (если разрешены)
WR3 · С1 · 8 бит, разрешение приема
WR4 · 44 · х15, 1 стоп-байт без контроля
WR5 · 68 · 8 бит, разрешение передачи
WR6 · XX · Символ синхронизации (только синхронный режим)
WR7 · XX · Символ синхронизации (только синхронный режим)
WR8 · (Буфер передачи) · Передаваемые данные (прямой доступ с D/C' = 1)
WR9 · СО · Сброс
WR10 · XX · Режимы синхронных операций
WR11 · 50 · Такты приема/передачи от генератора скорости пересылки
WR12 · 10210 · Делитель скорости пересылки - старший байт
WR13 · 00 · Делитель скорости пересылки - младший байт
WR14 · 03 · Разрешение генератора скорости пересылки
WR15 · XX · Режимы прерываний (если разрешены)
_____
1) Асинхронный режим, 1200 бод, 8 бит, без контроля четности.
2) XX-произвольное состояние; все числа шестнадцатеричные, кроме WR12.
Обратите внимание на состояние XX (произвольное) для регистров, игнорируемых нами, в силу того, что мы не используем ни прерываний, ни синхронного режима. Регистр WR9 выполняет полный сброс микросхемы, который должен предшествовать любым другим командам. С помощью регистров WR12 и WR13 устанавливается 16-разрядное значение делителя частоты передачи, которое для микросхемы 8530 дается выражением частота передачи = fтакт/[2 (режим генератора) x (делитель + 2)]. Таким образом, при частоте генератора 4 МГц и режиме генератор x16 для скорости передачи 1200 бод получаем делитель 10210 (фактически скорость передачи составит 1201,92 бод, что весьма близко к заданному значению). При выбранной нами частоте генератора возможны все стандартные скорости передачи вплоть до 9600 бод (для этой скорости делитель должен быть равен 13).
Заметьте, что в вашем распоряжении все многочисленные режимы работы УСАПП, устанавливаемые соответствующими последовательностями инициализирующих управляющих байт. Микросхема 8530, как и все УСАПП, обеспечивает также синхронную коммуникацию в различных режимах со скоростями до 1 Мбит/с; это особенно полезно для пересылки данных между двумя процессорами. Для нашего прибора такой способ пересылки не имеет смысла в силу ограниченного объема оперативной памяти, однако он может оказаться полезным при подключении жесткого диска.
Обратите внимание на необходимость пересылки из ЦП в УСАПП правильной последовательности инициализирующих байт до того, как начнут передаваться какие-либо последовательные данные, как это было и в случае параллельного порта 8536; в нашем примере последовательный порт не использовался, так что мы опустили его инициализацию. Программа 11.4 дает понятие о процедуре инициализации. Сложность программы (включая декодирование таблиц с данными с целью определения управляющих байтов) — это цена, которую вы платите за исключительную гибкость БИС поддержки микропроцессора.
После того как с помощью управляющих регистров установлен режим работы УСАПП, можно передавать и принимать байты данных с помощью циклов ЦП записи и чтения при высоком уровне сигнала D/C'. С целью определения наличия нового, ожидающего приема в ЦП байта данных или возможности пересылки в УСАПП нового байта для его дальнейшей передачи следует опрашивать регистр состояния (при низком уровне D/C'), конкретно D0 в регистре RR0 в первом случае, и D2 в том же регистре во втором.
В дополнение к этому по другим битам регистра состояния можно судить о фиксации ошибки четности, потере принимаемых данных и т. д. Часто эти страшные удары судьбы можно игнорировать и смело идти вперед. В программе 11.5 приведены фрагменты пересылки данных при том же, что и раньше, отображении регистров на адресное пространство.
Учтите, что эти примеры, в которых используется программный ввод-вывод с проверкой состояния (см. разд. 10.06–10.08), иллюстрируют работу простейших программных драйверов. В них работа ЦП останавливается на время циклического опроса флага состояния. Использование механизма прерываний позволяет повысить эффективность работы ЦП; это особенно справедливо для операций ввода. Микросхема 8530 может возбуждать прерывания по любому указанному условию; от нее даже можно получить в качестве подтверждения выбранный вами 8-битовый вектор, если использовать линии подтверждения прерывания (IEI, IEO, INTACK). Все эти возможности реализуются с помощью управляющих байтов инициализации.